#include <iostream>
#include <vector>

// 通用的Renderer模板
template<typename T>
class Renderer {
public:
    void render(const T& data) {
        std::cout << "Rendering generic data." << std::endl;
    }
};

// 特化版本，专为 std::vector<int> 类型设计
template<>
class Renderer<std::vector<int>> {
public:
    void render(const std::vector<int>& data) {
        std::cout << "Optimized rendering for vector<int>." << std::endl;
        for (int i : data) {
            std::cout << "Data: " << i << std::endl;
        }
    }
};

// 偏特化版本，适用于所有类型的 std::vector
template<typename T>
class Renderer<std::vector<T>> {
public:
    void render(const std::vector<T>& data) {
        std::cout << "Rendering vector of any type." << std::endl;
        for (const T& item : data) {
            Renderer<T> itemRenderer;
            itemRenderer.render(item);
        }
    }
};
int main() {
    // 使用通用模板
    Renderer<double> genericRenderer;
    genericRenderer.render(3.14159);

    // 使用特化的Renderer模板，针对 std::vector<int>
    Renderer<std::vector<int>> specializedRenderer;
    std::vector<int> intData = {1, 2, 3, 4, 5};
    specializedRenderer.render(intData);

    // 使用偏特化的Renderer模板，针对 std::vector<double>
    Renderer<std::vector<double>> partialSpecializedRenderer;
    std::vector<double> doubleData = {1.1, 2.2, 3.3};
    partialSpecializedRenderer.render(doubleData);

    return 0;
}